package com.sgb.goods.utils;

import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.Locale;

/**
 * getInstance()、getNumberInstance()。返回当前默认语言环境的通用数值格式。
 * getInstance(Locale)、getNumberInstance(Locale)。返回指定语言环境的通用数值格式。
 * NumberFormat.setMinimumIntegerDigits(int)。设置数的整数部分所允许的最小位数。
 * NumberFormat.setMaximumIntegerDigits(int)。设置数的整数部分所允许的最大位数。
 * NumberFormat.setMinimumFractionDigits(int)。设置最少小数点位数，不足的位数以0补位，超出的话按实际位数输出。
 * NumberFormat.setMaximumFractionDigits(int)。设置最多保留小数位数，不足不补0。
 */
public class NumberFormatUtils {

    /**
     * 保留两位小数且含有千分位
     *
     * @param data
     * @return
     */
    public static String formatAmt(Number data) {
        return baseFormatAmt(data, 2, true);
    }


    /**
     * 保留两位小数且不含有千分位
     *
     * @param data
     * @return
     */
    public static String formatAmtNoUseGroup(Number data) {
        if(data==null){
            return "0.00";
        }
        return baseFormatAmt(data, 2, false);
    }


    public static String formatAmtNoUseGroup(Number data, int minDigits) {
        return baseFormatAmt(data, minDigits, false);
    }

    public static String formatAmtUseGroup(Number data, int minDigits) {
        return baseFormatAmt(data, minDigits, true);
    }


    /**
     * @param data      数据源
     * @param minDigits 保留得小数位数
     * @param useGroup  是否使用千分位
     * @return result 结果
     */
    public static String baseFormatAmt(Number data, int minDigits, boolean useGroup) {
        if(data==null){
            return "";
        }
        NumberFormat numberFormat = NumberFormat.getInstance();
        numberFormat.setMinimumFractionDigits(minDigits);
        numberFormat.setGroupingUsed(useGroup);
        String result = numberFormat.format(data);
        return result;
    }

    /**
     * @param data              数据源
     * @param minFractionDigits 保留得最小小数位数
     * @param maxFractionDigits 保留得最大小数位数
     * @param useGroup          是否使用千分位
     * @param minIntegerDigits  整数部分所允许的最小位数
     * @param maxIntegerDigits  整数部分所允许的最大位数
     * @return result 结果
     */
    public static String baseFormatAmt(Number data, int minFractionDigits, int maxFractionDigits, boolean useGroup, int minIntegerDigits, int maxIntegerDigits) {
        NumberFormat numberFormat = NumberFormat.getInstance();
        numberFormat.setMinimumFractionDigits(minFractionDigits);
        numberFormat.setMaximumFractionDigits(maxFractionDigits);
        numberFormat.setMinimumIntegerDigits(minIntegerDigits);
        numberFormat.setMaximumIntegerDigits(maxIntegerDigits);
        numberFormat.setGroupingUsed(useGroup);
        String result = numberFormat.format(data);
        return result;
    }

    /**
     * @param data   数据源
     * @param format 格式化得需求
     *               “#”：无小数，小数部分四舍五入
     *               “.#”：整数部分不变，一位小数，四舍五入。
     *               “.##”：整数部分不变，二位小数，四舍五入。
     *               “###，####.##” 千分位
     * @return result 结果
     */
    public static String BaseDecimalFormat(Number data, String format) {
        DecimalFormat decimalFormat = new DecimalFormat(format);
        String result = decimalFormat.format(data);
        return result;
    }

    /**
     * 百分比转换
     *
     * @param data   数据源
     * @param locale 语言环境（Locale.CHINA）
     * @return result 结果
     */
    public static String percentFormat(Number data, int minFractionDigits, Locale locale) {
        NumberFormat numberFormat = NumberFormat.getPercentInstance(locale);
        numberFormat.setMinimumFractionDigits(minFractionDigits);
        String result = numberFormat.format(data);
        return result;
    }


    /**
     * 百分比转换
     *
     * @param data 数据源
     * @return result 结果 货币格式输出，这里是中国
     */
    public static String percentFormat(Number data) {
        return percentFormat(data, 2, Locale.CHINA);
    }
}
